package controlador;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import datos.AccionesCompra;
import datos.AccionesDetalleCompra;
import datos.AccionesDetalleVenta;
import datos.AccionesLinea;
import datos.AccionesMarca;
import datos.AccionesProducto;
import datos.AccionesProveedor;
import datos.AccionesUsuario;
import datos.AccionesValorFecha;
import datos.Compra;
import datos.DetalleCompra;
import datos.Linea;
import datos.Marca;
import datos.Producto;
import datos.Proveedor;
import datos.Usuario;
import datos.ValorFecha;

/**
 * Servlet implementation class EditarProducto
 */
public class EditarProducto extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EditarProducto() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		String user = (String) sesion.getAttribute("user");
		String pass = (String) sesion.getAttribute("pass");
		Usuario u = new Usuario(user, pass);
		String r = AccionesUsuario.reemplazar(this.getClass().getSimpleName());
		if(AccionesUsuario.validarUsuario(u)){
			if(AccionesUsuario.validarPermiso(u, r)){
			String submit=request.getParameter("submit");
			switch (submit){
			case "Eliminar":
			int idCompra=Integer.parseInt(request.getParameter("idCompra"));
			int idTipoCompra=Integer.parseInt(request.getParameter("idTipoCompra"));
			String idProducto=request.getParameter("idProducto");
			int cantidad=Integer.parseInt(request.getParameter("cantidad"));
			double subtotal=Double.parseDouble(request.getParameter("subtotal"));
			if(AccionesProducto.tieneVentas(idProducto)){
				sesion.setAttribute("redireccionServletCompra", true);
				sesion.setAttribute("errorEliminarCompra", true);
				response.sendRedirect("resumenCompra.jsp");
			}else{
			sesion.setAttribute("redireccionServletCompra", true);
			Producto p=AccionesProducto.getOneById(idProducto);
			DetalleCompra dc=new DetalleCompra(idCompra, p, cantidad, subtotal);
			dc.setIdTipoCompra(idTipoCompra);
			AccionesDetalleCompra.deleteOne(dc);
			Compra c=AccionesCompra.getOne(idCompra, idTipoCompra);
			AccionesCompra.updateTotalCompra(c, subtotal);
			p.setCantidad(cantidad);
			AccionesProducto.updateProductoVenta(p);
			if(AccionesProducto.getOneById(p.getIdProducto()).getCantidad()==0){
				AccionesProducto.deleteOne(p.getIdProducto());
			}
			if(AccionesDetalleCompra.getOne(idCompra, idTipoCompra).isEmpty()){
				AccionesCompra.deleteOne(idCompra, idTipoCompra);
				sesion.setAttribute("errorEliminarCompra", false);
				sesion.setAttribute("redireccionServletCompra", false);
				response.sendRedirect("compras.jsp");
			}else{
			sesion.setAttribute("errorEliminarCompra", false);
			
			response.sendRedirect("resumenCompra.jsp");
			}
			}
		break;
			case "Modificar":
				String idProducto1=request.getParameter("idProducto");
				if(AccionesProducto.tieneVentas(idProducto1)){
					sesion.setAttribute("redireccionServletCompra", true);
					sesion.setAttribute("errorModificarCompra", true);
					response.sendRedirect("resumenCompra.jsp");
				}else{
					int idCompra1=Integer.parseInt(request.getParameter("idCompra"));
					int idTipoCompra1=Integer.parseInt(request.getParameter("idTipoCompra"));
					int cantidad1=Integer.parseInt(request.getParameter("cantidad"));
					double subtotal1=Double.parseDouble(request.getParameter("subtotal"));
					sesion.setAttribute("idProductoModifCompra", idProducto1);
					sesion.setAttribute("idCompraModifCompra", idCompra1);
					sesion.setAttribute("idTipoCompraModifCompra", idTipoCompra1);
					sesion.setAttribute("cantidadModifCompra", cantidad1);
					sesion.setAttribute("subtotalModifCompra", subtotal1);
					response.sendRedirect("modificarProductoCompra.jsp");
				}
				break;
		}
			}else{
				response.sendRedirect("index.jsp");
			}
		}else{
			response.sendRedirect("login.jsp");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		String user = (String) sesion.getAttribute("user");
		String pass = (String) sesion.getAttribute("pass");
		Usuario u = new Usuario(user, pass);
		String r = AccionesUsuario.reemplazar(this.getClass().getSimpleName());
		if(AccionesUsuario.validarUsuario(u)){
			if(AccionesUsuario.validarPermiso(u, r)){
			String submit=request.getParameter("submit");
			switch (submit){
			case "Modificar":
			String idProducto=request.getParameter("idProducto");
			System.out.println(idProducto);
			String nombre=request.getParameter("nombre");
			
			//int idProveedor=Integer.parseInt(request.getParameter("idProveedor"));
			int idMarca=Integer.parseInt(request.getParameter("idMarca"));
			int ptoCritico=Integer.parseInt(request.getParameter("ptoCritico"));
			String idAlt=request.getParameter("idAlt");
			double costo=Double.parseDouble(request.getParameter("costo"));
			double precio=Double.parseDouble(request.getParameter("precio"));
			if(AccionesProducto.costoEsIgual(idProducto, costo)==false && AccionesProducto.precioEsIgual(idProducto, precio)==true){
				ValorFecha vf=new ValorFecha(idProducto,AccionesProducto.getOneById(idProducto).getCosto(),AccionesProducto.getOneById(idProducto).getPrecio());
				vf.setCostoNuevo(costo);
				vf.setPrecioNuevo(precio);
				AccionesValorFecha.addValorFecha(vf);
			}else if(AccionesProducto.precioEsIgual(idProducto, precio)==false && AccionesProducto.costoEsIgual(idProducto, costo)==true){
				ValorFecha vf=new ValorFecha(idProducto,AccionesProducto.getOneById(idProducto).getCosto(),AccionesProducto.getOneById(idProducto).getPrecio());
				vf.setCostoNuevo(costo);
				vf.setPrecioNuevo(precio);
				AccionesValorFecha.addValorFecha(vf);
			}else if(AccionesProducto.costoEsIgual(idProducto, costo)==false && AccionesProducto.precioEsIgual(idProducto, precio)==false){
				ValorFecha vf=new ValorFecha(idProducto,AccionesProducto.getOneById(idProducto).getCosto(),AccionesProducto.getOneById(idProducto).getPrecio());
				vf.setCostoNuevo(costo);
				vf.setPrecioNuevo(precio);
				AccionesValorFecha.addValorFecha(vf);
			}
			
			Marca m=AccionesMarca.getMarcaById(idMarca);
			//Proveedor pro=AccionesProveedor.getOne(idProveedor);
			//System.out.println(idProducto);
			//System.out.println(nombre);
			//System.out.println("marca"+idMarca);
			//System.out.println("provee"+idProveedor);
			//System.out.println("costo"+costo);
			//System.out.println("costo"+precio);
			//System.out.println("pto"+ptoCritico);
			//System.out.println("idAlt"+idAlt);
			Producto p=new Producto(idProducto, nombre, null, m, null, costo, precio, 0, ptoCritico, idAlt);
			int idProveedor=AccionesMarca.getMarcaById(idMarca).getIdProveedor();
			AccionesProducto.updateProducto(p);
			AccionesProducto.updateProveedorProducto(idProveedor, idMarca);
			
			response.sendRedirect("stock.jsp");
			break;
			case "Guardar":
				int idCompra=Integer.parseInt(request.getParameter("idCompra"));
				int idTipoCompra=Integer.parseInt(request.getParameter("idTipoCompra"));
				String idProducto1=request.getParameter("idProducto");
				int cantidad=Integer.parseInt(request.getParameter("cantidad"));
				double subtotal=Double.parseDouble(request.getParameter("subtotal"));
				ArrayList <DetalleCompra> detalles=AccionesDetalleCompra.getOne(idCompra, idTipoCompra);
				int cantidadEx=0;
				double costoEx=AccionesProducto.getOneById(idProducto1).getCosto();
				
				for (int i=0; i<detalles.size(); i++){
				if(detalles.get(i).getProducto().getIdProducto().equals(idProducto1)){
					cantidadEx=detalles.get(i).getCantidad();
				}
				}
				double subtotalNuevo=costoEx*cantidad;
				int cantidadFinal=0;
				
				if(cantidadEx>cantidad){
					cantidadFinal=cantidadEx-cantidad;
					Producto p1=AccionesProducto.getOneById(idProducto1);
					p1.setCantidad(cantidadFinal);
					AccionesProducto.updateProductoVenta(p1);
				}else{
					cantidadFinal=cantidad-cantidadEx;
					Producto p1=AccionesProducto.getOneById(idProducto1);
					p1.setCantidad(cantidadFinal);
					AccionesProducto.updateProductoCompra(p1);
				}
				Producto p1=AccionesProducto.getOneById(idProducto1);
				DetalleCompra dc=new DetalleCompra(idCompra, p1, cantidad, subtotalNuevo);
				dc.setIdTipoCompra(idTipoCompra);
				double totalActual=AccionesCompra.getOne(idCompra, idTipoCompra).getTotal();
				double totalNuevo=(totalActual-subtotal)+subtotalNuevo;
				System.out.println("subtotal"+subtotal);
				System.out.println("totalActual"+totalActual);
				System.out.println("subtotalNuevo"+subtotalNuevo);
				System.out.println("totalNuevo"+totalNuevo);
				AccionesDetalleCompra.updateDetalleCompra(dc);
				Compra c=AccionesCompra.getOne(idCompra, idTipoCompra);
				AccionesCompra.updateTotal(c, totalNuevo);
				response.sendRedirect("compras.jsp");
				break;
			}
			}else{
				response.sendRedirect("index.jsp");
			}
		}else{
			response.sendRedirect("login.jsp");
		}
	}

}
